import os
import sys

# 使用这个全局变量来管理所有的学生信息
students = []

def save():
    """
    用于存档
    """
    # 此处的路径不是绝对路径，而是相对路径
    # 这个写法含义就是让 record.txt 和 当前的 Studet_Infor_Manage_Systen.py 在同一个目录里
    with open('record.txt', 'w', encoding='utf-8') as f:
        for s in students:
            f.write(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}\n")
        print(f'[存档成功]共存储了 {len(students)} 条记录！')

def load():
    """
    用于读档
    """
    # 为了避免方式打开文件的时候，文件不存在引起异常。
    if not os.path.exists('record.txt'):
        return

    # 读档的时候压迫保证先把就地数据给清理干净！
    global students
    students = []
    with open('record.txt', 'r', encoding='utf-8') as f:
        for line in f:
            # 针对这一行数据，按照 \t 进行切分操作！
            # 切分之前，要去除末尾的换行。
            line = line.strip()
            tokens = line.split('\t')
            if len(tokens) != 4:
                print(f'当前格式存在问题！line={line}')
                continue
            student = {
                'studentId': tokens[0],
                'name': tokens[1],
                'gender': tokens[2],
                'className': tokens[3],
            }
            students.append(student)
    print(f'[读档成功]共读取了 {len(students)} 条记录！')



def menu():
    print(' 1. 新增学生')
    print(' 2. 显示学生')
    print(' 3. 查找学生')
    print(' 4. 删除学生')
    print(' 0. 退出程序')
    choice = input('请输入您选择的数字：')
    return choice

def insert():
    # 新增学生
    print('[新增学生]开始！')
    studentId = input('请输入学生的学号：')
    name = input('请输入学生的姓名：')
    gender = input('请输入学生的性别：')
    if gender not in ('男', '女'):
        print('性别输入的内容不符合要求，新增失败！')
        return
    className = input('请输入学生的班级：')
    student = {
        'studentId': studentId,
        'name': name,
        'gender': gender,
        'className': className,
    }
    global students
    students.append(student)
    # 增加保存操作
    save()
    print('[新增学生]完毕！')

def show():
    # 显示学生
    print('[显示学生]开始！')
    for s in students:
        print(f'[{s["studentId"]}]\t{s["name"]}\t{s["gender"]}\t{s["className"]}')
    print(f'[显示学生]完毕！共显示了{len(students)}条数据')

def find():
    # 根据学生姓名，来进行查找
    print('[查找学生]开始！')
    name = input('请输入要查找的学生姓名：')
    count = 0
    for s in students:
        if name == s['name']:
            print(f'[{s["studentId"]}]\t{s["name"]}\t{s["gender"]}\t{s["className"]}')
            count += 1
    print(f'[查找学生]结束！共查找到了{count}个匹配的学生！')

def delete():
    # 删除学生数据
    print('[删除学生信息]开始！')
    studentId = input('请输入要删除的学生学号：')
    # 看这个学号所对应的学生对应的是哪个字典，然后从列表中删除掉就好了！
    for s in students:
        if studentId == s['studentId']:
            print(f"已删除'{s['name']}'学生的信息！")
            students.remove(s)
    # 增加保存操作
    save()
    print('[删除学生]结束！')

def main():
    """
    入口函数
    :return:
    """
    # 通过控制台和用户进行交互
    print('---------------------------------------------------')
    print('              欢迎来到学生信息管理系统                 ')
    print('---------------------------------------------------')
    # 在程序启动时，调用文档
    load()
    while True:
        choice = menu()
        if choice == '1':
            insert()
        elif choice == '2':
            show()
        elif choice == '3':
            find()
        elif choice == '4':
            delete()
        elif choice == '0':
            # 退出程序
            print('goodbye!')
            sys.exit()
        else:
            print('您的输入有误，请重新输入！')
            # 需要进入下一次循环
            # continue



main()




















